Applications are typically created based on modularity and readability. However, control flows in the application are typically not emphasized during the development or deployment of such applications. Therefore, to enhance performance of applications, optimization has become increasingly utilized. Optimization may be accomplished by using basic data block or edge counts.
However, typically, optimization of applications may be inadequate because information on which data blocks are executed or which threads of the applications execute which data blocks is unavailable. Therefore, in many scenarios, optimization is problematic.
For example, when access to a same data block by multiple threads is performed in a multi-core environments, cache coherency issues, among other issues may resulted in degraded performance. Similarly, the actual execution sequence of each thread of an application is typically not utilized when determining optimization parameters.
Thus, there is a need for creating a profile or a layout containing information for effectively optimizing or enhance performance of an application.